在本步骤中,您将创建提供高斯模糊效果的材质。
本教程的起点资料是存储在 <KanziWorkspace>/Tutorials/Blur/Start 目录中的 Blur.kzproj Kanzi Studio 工程文件。
<KanziWorkspace>/Tutorials/Blur/Completed 目录包含本教程已完成的 Kanzi Studio 工程。
在本节中,您将首先创建支持定向高斯模糊效果的材质类型,然后创建能用于应用该效果到 3D 内容的材质。
要创建提供模糊效果的材质:
precision mediump float; uniform sampler2D Texture0; uniform lowp float BlendIntensity; uniform mediump vec2 kzTextureSize0; //定义应用模糊的方向(x 或 y 轴)。 uniform lowp vec2 BlurDirection; //确定模糊强度。 uniform mediump float BlurRadius; //定义从顶点着色器传递的纹理坐标特性。 varying mediump vec2 vTexCoord; vec4 gaussianBlur(mediump vec2 coord, lowp vec2 dir) { //定义含 9 个示例的一维高斯核。 float GAUSSIAN_KERNEL[9]; GAUSSIAN_KERNEL[0] = 0.028532; GAUSSIAN_KERNEL[1] = 0.067234; GAUSSIAN_KERNEL[2] = 0.124009; GAUSSIAN_KERNEL[3] = 0.179044; GAUSSIAN_KERNEL[4] = 0.20236; GAUSSIAN_KERNEL[5] = 0.179044; GAUSSIAN_KERNEL[6] = 0.124009; GAUSSIAN_KERNEL[7] = 0.067234; GAUSSIAN_KERNEL[8] = 0.028532; vec2 texel = 1.0/kzTextureSize0; vec4 sum = vec4(0.0); //获取这个片段的原始纹理坐标。 vec2 tc = coord; //获取模糊量。 float blur = BlurRadius; //设置水平方向的模糊量。 float hstep = dir.x*texel.x; //设置垂直方向的模糊量。 float vstep = dir.y*texel.y; // 为每个片段采样 9 次纹理。 for(int i = 0; i < 9; i++) { float pixelOffset = (float(i) - floor(9.0 * 0.5)); mediump vec2 coord = vec2(tc.x + pixelOffset * blur * hstep, tc.y + pixelOffset * blur * vstep); sum += texture2D(Texture0, coord) * GAUSSIAN_KERNEL[i]; } return sum; } void main() { gl_FragColor = gaussianBlur(vTexCoord, BlurDirection) * BlendIntensity; }
要详细了解关于材质和材质类型的信息,请参阅材质类型和材质。
要详细了解有关渲染器信息,请参阅着色器。